package main

import (
	"fmt"
	"time"
)

type LinkNode struct {
	data int
	next *LinkNode
}

// 根据指定节点数量，初始化链表
func InitLinkNode(nodeNum int) *LinkNode {
	var head = new(LinkNode)
	var cursorLinkNode = &LinkNode{}
	cursorLinkNode = head

	for i := 1; i <= nodeNum; i++ {
		var tmpNode = &LinkNode{}
		tmpNode.data = i
		tmpNode.next = nil

		cursorLinkNode.next = tmpNode
		cursorLinkNode = tmpNode

	}

	return head
}

// 查找指定数据的节点
func searchLinkData(head *LinkNode, destData int) {
	var cursorLinkNode *LinkNode = head.next
	var i = 0
	for cursorLinkNode != nil {
		i++
		if cursorLinkNode.data == destData {
			fmt.Printf("第 %d 次，寻找到了目标值：:%d\n", i, destData)
		}
		cursorLinkNode = cursorLinkNode.next
	}
}

func main() {
	start := time.Now()
	nodeNum := 500000 // 50万单链表节点
	head := InitLinkNode(nodeNum)
	for i := 1; i <= 10; i++ {
		searchLinkData(head, nodeNum)
	}
	fmt.Printf("单次平均耗时：%d ms\n", time.Now().Sub(start).Milliseconds()/10)

}
